//路由鉴权：项目中路由能不能的权限设置（某一个路由什么条件下可以访问、什么条件不能访问）
import router from './router'
//引入进度条
import nprogress from 'nprogress'
//引入进度条样式
import 'nprogress/nprogress.css'
//引入user仓库
import useUserStore from './store/modules/user'
import setting from './setting'
//引入大仓库
import pinia from './store'
const userStore = useUserStore(pinia)
//隐藏进度条上的圆圈
nprogress.configure({ showSpinner: false })
//全局守卫：项目当中任意路由切换都会触发的钩子
//全局前置守卫
router.beforeEach(async (to, from, next) => {
  document.title = `${setting.logo_title} - ${to.meta.title}`
  //to:你将要访问的路由
  //from：你从哪个路由而来的
  //next：路由的放行函数
  nprogress.start()
  //获取用户信息
  const username = userStore.userName
  //判断登陆状态
  if (userStore.token) {
    //如果已经登陆，则不能访问登陆页面
    if (to.path == '/login') {
      next({ path: '/' })
    } else {
      //判断是否有用户信息
      if (username) {
        //如果有用户信息
        next()
      } else {
        //如果没有用户信息,则获取用户信息
        try {
          await userStore.getUserInfo()
          next()
        } catch (error) {
          //token过期：获取不到用户信息了
          //用户手动修改本地存储token
          //退出登陆->用户相关的数据清空
          await userStore.userLoginOut()
          next({ path: '/login', query: { redirect: to.path } })
        }
      }
    }
  } else {
    if (to.path == '/login') {
      next()
    } else {
      //如果没有登陆，只直接跳转到登陆页面
      next({ path: '/login', query: { redirect: to.path } })
    }
  }
})
//全局后置守卫
router.afterEach((to, from) => {
  nprogress.done()
})

//第一个问题：任意路由切换实现进度条业务 --nprogress
//第二个问题：路由鉴权（路由组件访问权限的设置）
